home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
- # This file is public domain and comes with NO WARRANTY of any kind
- #
- # scripts to start the MySQL daemon and restart it if it dies unexpectedly
- #
- # This should be executed in the MySQL base directory if you are using a
- # binary installation that has other paths than you are using.
- #
- # mysql.server works by first doing a cd to the base directory and from there
- # executing safe_mysqld
-
- trap '' 1 2 3 15 # we shouldn't let anyone kill us
-
- # Check if we are starting this relative (for the binary release)
- if test -d ./data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
- -x ./bin/mysqld
- then
- MY_BASEDIR_VERSION=`pwd` # Where bin, share and data is
- DATADIR=$MY_BASEDIR_VERSION/data # Where the databases are
- ledir=$MY_BASEDIR_VERSION/bin # Where mysqld are
- # Check if this is a 'moved install directory'
- elif test -f ./var/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \
- -x ./libexec/mysqld
- then
- MY_BASEDIR_VERSION=`pwd` # Where libexec, share and var is
- DATADIR=$MY_BASEDIR_VERSION/var # Where the databases are
- ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld are
- else
- MY_BASEDIR_VERSION=/usr/freeware
- DATADIR=/var/spool/mysql
- ledir=/usr/freeware/sbin
- if test ! -x $ledir/mysqld
- then
- echo "The file $ledir/mysqld doesn't exists or is not executable"
- echo "Please do a cd to the mysql installation directory and restart"
- echo "this scrift from there as follows:"
- echo "./bin/safe_mysqld".
- exit 1;
- fi
- fi
-
- pid_file=$DATADIR/`/usr/bsd/hostname`.pid
- log=$DATADIR/`/usr/bsd/hostname`.log
- err_log=$DATADIR/`/usr/bsd/hostname`.err
-
- # Parse arguments to see if caller wants the pid_file somewhere else.
- for arg
- do
- case $arg
- in
- --pid-file=*)
- pid_file=`echo "$arg" | sed -e "s;--pid-file=;;"`
- ;;
- esac
- done
-
- #
- # If there exists an old pid file, check if the daemon is already running
- # Note: The switches to 'ps' may depend on your operating system
-
- if test -f $pid_file
- then
- PID=`cat $pid_file`
- if /bin/kill -0 $PID
- then
- if /sbin/ps -ef | grep mysqld | grep " $PID " > /dev/null
- then # The pid contains a mysqld process
- echo "A mysqld process already exists"
- echo "A mysqld process already exists at " `date` >> $err_log
- exit 1;
- fi
- fi
- rm -f $pid_file
- if test -f $pid_file
- then
- echo "Fatal error: Can't remove the pid file: $pid_file"
- echo "Fatal error: Can't remove the pid file: $pid_file at " `date` >> $err_log
- echo "Please remove it manually and start $0 again"
- echo "mysqld daemon not started"
- exit 1;
- fi
- fi
-
- echo "Starting mysqld daemon with databases from $DATADIR"
-
- #Default communication ports
- #MYSQL_TCP_PORT=3306
- if test -z "$MYSQL_UNIX_PORT"
- then
- MYSQL_UNIX_PORT="/tmp/mysql.sock"
- export MYSQL_UNIX_PORT
- fi
- #export MYSQL_TCP_PORT
-
- # Does this work on all systems?
- #if type ulimit | grep "shell builtin" > /dev/null
- #then
- # ulimit -n 256 > /dev/null 2>&1 # Fix for BSD and FreeBSD systems
- #fi
-
- echo "mysqld started on " `date` >> $err_log
- while true
- do
- rm -f $MYSQL_UNIX_PORT $pid_file # Some extra safety
- if test "$#" -eq 0
- then
- nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
- >> $err_log 2>&1
- else
- nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \
- "$@" >> $err_log 2>&1
- fi
- if test ! -f $pid_file # This is removed if normal shutdown
- then
- break;
- fi
- if false
- then
- # Test if one proces was hanging.
- # This is only a fix for Linux (running as base 3 mysqld processes)
- # but should work for the rest of the servers.
- # The only thing is ps x => redhat 5 gives warnings when using ps -x.
- # kill -9 is used or the proces won't react on the kill.
- numofproces=`ps x | grep -v "grep" | grep -c $ledir/mysqld`
- echo -e "\nNumber of processes running now: $numofproces" | tee -a $err_log
- I=1
- while test "$I" -le "$numofproces"
- do
- PROC=`ps x | grep $ledir/mysqld | grep -v "grep" | tail -1`
- for T in $PROC
- do
- break
- done
- # echo "TEST $I - $T **"
- if kill -9 $T
- then
- echo "mysqld proces hanging, pid $T - killed" | tee -a $err_log
- else
- break
- fi
- I=`expr $I + 1`
- done
- fi
- echo "mysqld restarted on " `date` | tee -a $err_log
- done
-
- echo "mysqld ended on " `date` >> $err_log
- echo "mysqld daemon ended"
-